#ifndef NATIVE_SHM_H
#define NATIVE_SHM_H



#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include "memory_management.h"
#include "dfruntime.h"

#ifdef __cplusplus
extern "C" {
#endif



bool native_shm_next_rls( struct dfrt_mem_release_mesg * msgbuf );


void native_shm_init_pre_fork();



void  native_shm_init_last();


bool native_shm_is_acquired(void * vptr);

void * native_shm_malloc(size_t size);


void native_shm_free( void * ptr );


bool native_shm_try_acquire( void * ptr, size_t size, bool exclusive );

void native_shm_release( void * ptr ) ;

void native_shm_wake( void * ptr );

void native_shm_blocking_acquire(void * ptr, size_t size, bool exclusive );
bool native_shm_async_acquire(void * vptr, size_t size, bool exclusive );

void native_shm_fini();

void * native_shm_get_global();

void native_shm_set_global(void * ptr);
void native_shm_init_tls();
void native_shm_allthread_barrier ();


#ifdef __cplusplus
}
#endif

#endif
